//一、http请求响应协议
//里面配置数据交互方法 可以在所有组件中输出

//1.引入axios发送请求
import axios from 'axios'

//2.引入ant库
import { Toast } from 'antd-mobile'

let baseUrl = ''
let $pre = ''
//2.配置环境 如果是开发环境需要加上/api使图片显示,生产环境时需要去掉api
if (process.env.NODE_ENV === 'development') {
    baseUrl = '/api' //baseUrl相当于setupProxy.js中配置的target:"http://localhost:1000"
    $pre = 'http://localhost:1000'
}
export { $pre }

//2.请求拦截 设置请求头 携带token
// axios.interceptors.request.use(config => {//config是每个组件的路径
//     //请求的时候,路径上补充'/api'
//     config.url = baseUrl + config.url;
//     //设置请求头携带token
//     if (config.url != baseUrl + '/api/login' && config.url != baseUrl + '/api/register') {
//         config.headers.authorization = JSON.parse(localStorage.getItem('isLogin')).token
//     }
//     return config
// })


axios.interceptors.request.use(config => {
    config.url = baseUrl + config.url;
    console.log(config.url);
    ///
    if (config.url != baseUrl + '/api/login' && config.url != baseUrl + '/api/register') {
        config.headers.authorization = JSON.parse(localStorage.getItem("isLogin")).token;
    }
    return config
})

//3.响应拦截 处理掉线 也就是token过期时 跳转到登录页
// axios.interceptors.response.use(res => {
//     //打印每次访问的路由地址
//     console.group('request url:' + res.config.url)
//     console.log(res);
//     console.groupEnd();

//     //token过期时弹出内容
//     if (res.data.code != 200) {
//         Toast.show({
//             content: res.data.msg
//         })
//     }
//     //token过期掉线的时跳转到登录页
//     if (res.data.msg == '登录已过期或访问权限受限') {
//         localStorage.removeItem('isLogin')
//         //原生js跳转页面
//         window.open('/', '_self')
//     }
//     return res
// })

axios.interceptors.response.use(res => {
    //打印
    console.group("request url:" + res.config.url)
    console.log(res);
    console.groupEnd()

    //失败
    if (res.data.code != 200) {
        Toast.show({
            content: res.data.msg
        })
    }
    //掉线
    if (res.data.msg === "登录已过期或访问权限受限") {
        localStorage.removeItem("userInfo")
        window.open("/", "_self")
    }
    return res;
})



//4. get请求封装
export const get = (url, params = {}) => {
    return axios({
        url, params
    })
}


//5.post请求封装
export const post = (url, params, haveFile = false) => {
    //haveFile判断是否有文件
    let d = null
    if (haveFile) { //如果有文件就创建一个文件
        d = new FormData()
        for (let key in params) {
            d.append(key, params[key]) //有文件的话就给每一项添加文件
        }
    } else {
        d = params //没有文件就传正常参数
    }

    return axios({ //返回地址 请求方式 参数
        url,
        method: 'post',
        data: d
    })

}
